package co.gov.medellin.ssti.sub.model.dao;

import java.util.Collection;
import java.util.List;

import co.gov.medellin.ssti.sub.model.vo.AreaVO;

public interface IAreaDAO2 {
	public List<AreaVO> findAreas(String strNombreArea);

	/**
	 * Metodo que consulta en TCS_BEN_AREA todas las areas disponibles.
	 * 
	 * @return Collection de areas.
	 * 
	 */
	Collection<AreaVO> findAllAreas();

	/**
	 * Metodo que consulta en TCS_BEN_AREA una area por codigo.
	 * 
	 * @param strCode
	 *            Codigo del area.
	 * @return objeto AreaVO correspondiente al area con tal codigo.
	 * 
	 */
	Collection<AreaVO> findArea(String strCode);

	/**
	 * Metodo encargado de realizar el insert de una area en TCS_BEN_AREA.
	 * 
	 * @param Arr
	 *            String[] { NOMBRE, DESCRIPCION, AREA_CODIGO, USUARIO_CREA,
	 *            FECHA_CREA, TERMINAL_CREA, USUARIO_MODIFICA, FECHA_MODIFICA,
	 *            TERMINAL_MODIFICA };
	 * @return
	 * 
	 */
	int insertArea(String[] Arr);

	/**
	 * Metodo que realiza un update de una area en TCS_BEN_AREA.
	 * 
	 * @param Arr
	 *            String[] {NOMBRE, DESCRIPCION, USUARIO_MODIFICA,
	 *            FECHA_MODIFICA, TERMINAL_MODIFICA}
	 * @param strCode
	 *            Codigo del area.
	 * @return Numero de filas modificadas.
	 * 
	 */
	int updateArea(String[] Arr, String strCode);

	/**
	 * Metodo que realiza un update de una subarea en TCS_BEN_AREA.
	 * 
	 * @param Arr
	 *            String[] {NOMBRE, DESCRIPCION, AREA_CODIGO, USUARIO_MODIFICA,
	 *            FECHA_MODIFICA, TERMINAL_MODIFICA}
	 * @param strCode
	 *            Codigo de la subarea.
	 * @return Numero de filas modificadas.
	 * 
	 */
	int updateSubArea(String[] Arr, String strCode);

	/**
	 * Metodo que consulta todas las subareas pertenecientes a una area.
	 * 
	 * @param strCodeArea
	 *            Codigo del area.
	 * @return Collection<AreaVO>.
	 * 
	 */
	Collection<AreaVO> findAllSubAreas(String strCodeArea);

	/**
	 * 
	 * @param strCodeArea
	 * @return
	 * 
	 */
	// Collection<AreaVO> findAllSubSecretarias(String strCodeArea);

	/**
	 * Metodo que consulta las areas autorizadas para un usuario identificado
	 * por strCodeUsu o todas si strGroupUser es "ADMINISTRADOR GENERAL" o
	 * "SUPER USUARIO"
	 * 
	 * @param strCodeUsu
	 *            Codigo de un usuario.
	 * @param strGroupUser
	 *            Grupo de usuarios.
	 * @return Collection<AreaVO> de areas que tiene autorizadas.
	 * 
	 */
	Collection<AreaVO> findAreasAuthorized(String strCodeUsu,
			String strGroupUser);

	/**
	 * Metodo que consulta las areas autorizadas para un usuario identificado
	 * por strCodeUsu o todas si strGroupUser es "ADMINISTRADOR GENERAL" o
	 * "SUPER USUARIO" y cuyo tcs_ben_subp_atr_beneficiario.nombre sea 'GESTOR'
	 * 
	 * @param strCodeUsu
	 *            Codigo de un usuario.
	 * @param strGroupUser
	 *            Grupo de usuarios.
	 * @return Collection<AreaVO> que cumplen con los criterios.
	 * 
	 */
	Collection<AreaVO> findAreasAuthorizedWithGestor(String strCodeUsu,
			String strGroupUser);

	/**
	 * Metodo que consulta la area a la que pertenece un programa.
	 * 
	 * @param strCodeProg
	 *            Codigo del programa.
	 * @return
	 * 
	 */
	AreaVO findAreaByProg(String strCodeProg);
}
